package day15;

import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

/**
 * TreeSet集合第二种比较方式：让集合自身具备比较性
 * 当元素自身不具备比较性时，或者具备的比较性不是所需要的。
 * 这时就需要让集合自身具备比较性。在集合初始化时就有了比较方式。
 * 实现方式：定义一个比较器，将比较器对象作为参数传递给TreeSet集合的构造函数。
 * @author wangbiao
 *
 */
public class TreeSetDemo {
	
	//当两种排序都存在时，以比较器为主。比较器方法比较常用
	public static void main(String[] args) {
		Set<Student> set = new TreeSet<Student>(new SetComparator());
		set.add(new Student("wangbiao", 21));
		set.add(new Student("zhangsan", 20));
		set.add(new Student("lisi", 22));
		set.add(new Student("wangwu2", 19));
		set.add(new Student("wangwu1", 19));
		
		for (Iterator<Student> iterator = set.iterator(); iterator.hasNext();) {
			Student student = iterator.next();
			System.out.println(student);
			
		}
	}
	
}

/**
 * 定义一个学生类的比较器，让TreeSet集合具有可比较性
 * @author wangbiao
 *
 */
class SetComparator implements Comparator<Student> {

	@Override
	public int compare(Student s1, Student s2) {
		
		int num = s1.getName().compareTo(s2.getName());
		
		if (num == 0) {
			//return s1.getAge() - s2.getAge();
			return new Integer(s1.getAge()).compareTo(s2.getAge());
		}
		return num; 
	}

}


